package livret.modele;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/**
 * C'est la classe qui représente le maitre de stage
 * Il est obligatoirement en entreprise
 * Ne peut exister si l'etudiant n'est pas dans la meme entreprise.
 * @author Solohery RAMANANARIVO, Fawzia CHABOUNI, Luc RABARIJAONA
 */
public class MaitreStage {

   private int id_maitrestage;
   private String nom;
   private String prenom;
   private String mail;
   private String entreprise;
   private String adresseEntreprise;
   private int codePostalEntreprise;
   private String villeEntreprise;
   private String password;
   private ArrayList<Etudiant> etudiants;

   public MaitreStage(int id_maitrestage, String nom, String prenom, String mail, String entreprise){
        this.nom = nom;
        this.prenom = prenom;
        this.mail = mail;
        this.entreprise = entreprise;
        this.id_maitrestage = id_maitrestage;
   }


    public String getAdresseEntreprise() {
        return adresseEntreprise;
    }

    public int getCodePostalEntreprise() {
        return codePostalEntreprise;
    }

    public String getEntreprise() {
        return entreprise;
    }

    public int getId_maitrestage() {
        return id_maitrestage;
    }

    public String getMail() {
        return mail;
    }

    public String getNom() {
        return nom;
    }

    public String getPassword() {
        return password;
    }

    public String getPrenom() {
        return prenom;
    }

    public String getVilleEntreprise() {
        return villeEntreprise;
    }

    public void setAdresseEntreprise(String adresseEntreprise) {
        this.adresseEntreprise = adresseEntreprise;
    }

    public void setCodePostalEntreprise(int codePostalEntreprise) {
        this.codePostalEntreprise = codePostalEntreprise;
    }

    public void setEntreprise(String entreprise) {
        this.entreprise = entreprise;
    }

    public void setId_maitrestage(int id_maitrestage) {
        this.id_maitrestage = id_maitrestage;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public void setVilleEntreprise(String villeEntreprise) {
        this.villeEntreprise = villeEntreprise;
    }


    /**
     * Ajoute un commentaire dans le carnet d'un étudiant
     * @param commentaire
     * @throws SQLException
     */
    public void PosterCommentaire(String date, String contenu, int idDestinataire) throws SQLException{

        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;

        try {
            connexion = DataBase.getConnection();
            select = connexion.createStatement();
            String sql = "INSERT INTO commentaire (id_auteur,date,contenu,nomAuteur,prenomAuteur,id_destinataire) VALUES('"+
                    this.getId_maitrestage()+"','"+date+"','"+contenu+"','"+idDestinataire+"','"+this.getNom()+"','"+
                    this.getPrenom()+"');";

        rs = select.executeQuery(sql);

        } finally {
              DataBase.close(rs);
              DataBase.close(select);
              DataBase.close(connexion);
        }
    }

    /** Récupère un maitre de stage par son id/password.
   * Si le maitre de stage n'est pas trouvé, renvoie null.
   * <br/>Requiert<blockquote> <code>id != null && !login.matches("^(\\s)*$")
   * <br/>password != null</code>
   * </blockquote>
   * @throws SQLException si problème avec le SGBD.
   */

    public static MaitreStage getByLoginPassword(final String id,final String password)throws SQLException {
        assert id != null && !id.matches("^\\s*$");
        assert password != null;
        //
        MaitreStage maitrestage = null;
        Connection cx = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
              cx = DataBase.getConnection();
              String sql = "SELECT id_maitrestage, nom, prenom, mail, entreprise FROM maitrestage WHERE id_maitrestaget=? AND password=?";
              ps = cx.prepareStatement(sql);
              ps.setString(1, id);
              ps.setString(2, password);
              rs = ps.executeQuery();
              if (rs.next()) {
                maitrestage = new MaitreStage(rs.getInt("id_maitrestage"), rs.getString("nom"), rs.getString("prenom"),
                        rs.getString("mail"),rs.getString("entreprise"));
              }
        } finally {
          DataBase.close(rs);
          DataBase.close(ps);
          DataBase.close(cx);
        }
        return maitrestage;
  }

    public void modifierMaitreStage(MaitreStage newMaitreStage,int idOld) throws SQLException{

         Connection connexion = null;
         PreparedStatement ps = null;
         String sql = null;
        try {
            connexion = DataBase.getConnection();
            connexion.setAutoCommit(false);

            sql="UPDATE maitrestage SET nom = '"+newMaitreStage.getNom()+"'"+
                                     ",prenom = '"+newMaitreStage.getPrenom()+"'"+
                                     ",email = '"+newMaitreStage.getMail()+"'"+
                                     ",entreprise = '"+newMaitreStage.getEntreprise()+"'"+
                                     "WHERE id_maitrestage = "+idOld;

            ps=connexion.prepareStatement(sql);
            ps.executeUpdate();

        }
        finally
        {
           DataBase.close(ps);
           DataBase.close(connexion);
        }

    }

}
